//
//  MulRowDeleteViewController.m
//  UITableViewDemo
//
//  Created by LZXuan on 15-5-18.
//  Copyright (c) 2015年 轩哥. All rights reserved.
//

#import "MulRowDeleteViewController.h"

#import "UserModel.h"

#define kScreenSize [UIScreen mainScreen].bounds.size

@interface MulRowDeleteViewController ()<UITableViewDataSource,UITableViewDelegate>
{
    //表格视图
    UITableView *_tableView;
    //数据源数组
    NSMutableArray *_dataArr;
    
    //多选之后 记录下选中了哪些
    NSMutableArray *_deleteArr;
}
@property (nonatomic,retain) UITableView *tableView;

@end

@implementation MulRowDeleteViewController
- (void)dealloc {
    [_deleteArr release];
    [_dataArr release];
    self.tableView = nil;
    [super dealloc];
}
- (void)viewDidLoad {
    [super viewDidLoad];
    [self creatTableView];
    
    [self dataInit];
}
#pragma mark - 数据
- (void)dataInit {
    _deleteArr = [[NSMutableArray alloc] init];
    
    _dataArr = [[NSMutableArray alloc] init];
    
    //创建 26 个一维 数组 把26个数组 放入_dataArr指向的对象
    //每个区分对应一个一维数组
    //每个cell 的数据 是一个整体（学生信息），这个时候我们应该 把这个学生信息封装一个类 (数据模型类) 每个cell 上面的数据 就是一个数据模型对象
    //这时我们就应该 把数据模型对象地址放入对应26个一维数组中
    
    for (NSInteger i = 0; i < 26; i++) {
        //一维数组
        NSMutableArray *arr = [[NSMutableArray alloc] init];
        for (NSInteger j = 0; j < 10 ; j++) {
            //一维数组的内容 应该是10个UserModel 对象
            UserModel *model = [[UserModel alloc] init];
            model.name = [NSString stringWithFormat:@"%C%ld",(unichar)('A'+i),j];
            model.phoneNumber = [NSString stringWithFormat:@"%u",arc4random()];
            model.sexStr = @"man";
            
            model.headName = [NSString stringWithFormat:@"%04u.jpg",arc4random()%24+33];
            //把模型对象放入数组中
            [arr addObject:model];
            [model release];
        }
        
        //把一维数组放入数据源
        [_dataArr addObject:arr];
        [arr release];
    }
    
    //有了数据之后 刷新表格
    [self.tableView reloadData];
}

#pragma mark - 创建表格
- (void)creatTableView {
    //取消导航条影响
    self.automaticallyAdjustsScrollViewInsets = NO;
    
    self.tableView = [[[UITableView alloc] initWithFrame:CGRectMake(0, 64, kScreenSize.width, kScreenSize.height-64) style:UITableViewStylePlain] autorelease];
    //设置代理和数据源
    self.tableView.delegate = self;
    self.tableView.dataSource = self;
    
    //打开系统的编辑按钮
    //每个视图控制器默认自带一个编辑按钮
    self.navigationItem.rightBarButtonItem = self.editButtonItem;
    
    
    //一旦把TableView粘贴到view 那么就可以立即执行协议的方法
    [self.view addSubview:self.tableView];
}

#pragma mark - UITableView协议
//有多少分区
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return _dataArr.count;
}
//每个分区有多少行
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    
    return [_dataArr[section] count];
}
//cell 显示之前 获取cell
//每次显示cell 都会调用
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *cellId = @"Cell";
    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
    if (!cell) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellId] autorelease];
    }
    //获取 数据源中数据模型对象
    UserModel *model = _dataArr[indexPath.section][indexPath.row];
    //填充cell  把数据模型的内容显示到cell 上
    
    cell.textLabel.text = model.name;
    cell.detailTextLabel.text = model.phoneNumber;
    cell.imageView.image = [UIImage imageNamed:model.headName];
    
    return cell;
}
//设置 分区 头标
// A B C D...
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    return [NSString stringWithFormat:@"%C",(unichar)('A'+section)];
}

#pragma mark - TableView的编辑
//1.打开整个TableView编辑状态
//UIViewController 自带的编辑按钮 会触发
//子类重写之后 可以控制
- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
    //先调用父类
    [super setEditing:editing animated:animated];
    //通过编辑按钮 控制整个TableView的编辑状态

    if (self.tableView.editing) {
        //当前是编辑 那么接下来要取消编辑
        self.tableView.tableFooterView = nil;//不显示删除按钮
    }else {
        [self creatDeleteButton];//创建删除按钮作为尾视图
    }
    
    [self.tableView setEditing:!self.tableView.editing animated:YES];
    
}

#pragma mark - 多选删除
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    return YES;
}
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
    //显示 多选 编辑
    return UITableViewCellEditingStyleInsert|UITableViewCellEditingStyleDelete;
}

//选中cell 和 取消选中cell
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    //选中cell 要把指定 cell 的 model  放入删除数组
    UserModel *model = _dataArr[indexPath.section][indexPath.row];
    
    [_deleteArr addObject:model];
}
//取消选中cell
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {
    //取消选中 把model 从删除数组中 删除
     UserModel *model = _dataArr[indexPath.section][indexPath.row];
 
    [_deleteArr removeObject:model];
}

#pragma mark - 删除按钮
- (void)creatDeleteButton {
    //我们可以把 一个删除按钮作为 TableView的尾视图
    UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
    button.frame = CGRectMake(0, 0, kScreenSize.width, 30);
    [button setTitle:@"删除" forState:UIControlStateNormal];
    
    [button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
    button.backgroundColor = [UIColor lightGrayColor];
    [button addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
    //设置TableView的尾视图
    self.tableView.tableFooterView = button;
    
}
- (void)btnClick:(UIButton *)button {
    
    //从_dataArr指向的数组 中 删除 _deleteArr中的元素
    for (NSMutableArray *arr in _dataArr) {
        //遍历数据源数组 得到 分区的一维数组 从一维数组中删除 多选的元素
        [arr removeObjectsInArray:_deleteArr];
    }
    
    [_deleteArr removeAllObjects];
    //数据源数组变了 刷新整个表格
    
    [self.tableView reloadData];
    
}





@end
